package com.application.model.ubicacion;

import java.util.Collection;

import org.apache.log4j.Logger;

import com.application.model.ubicacion.entity.Ubicacion;
import com.application.model.ubicacion.entity.UbicacionGenericaConHijo;
import com.application.model.xml.ConfigurationManager;

public class ManagerUbicacionEntity {

	private Ubicacion	ubicacion;
	
	public ManagerUbicacionEntity() {
		ubicacion = new Ubicacion();
	}

	private Ubicacion getUbicacion() {
		if(ubicacion == null){
			ubicacion = new Ubicacion();
		}
		return ubicacion;
	}
	private UbicacionGenericaConHijo getPais(String pais){
		return getUbicacion().getPais(pais);
	}
	
	private UbicacionGenericaConHijo getItem(UbicacionGenericaConHijo list, String key) {
		UbicacionGenericaConHijo result = null;		
		if(list!=null){
			result = list.getMapa().get(key);			
		}
		return result;
	}
	public void addPais(String pais, String paisId) {
		UbicacionGenericaConHijo paisObj = getPais(pais);
		if(paisObj==null){
			paisObj = new UbicacionGenericaConHijo();
			paisObj.setNombre(pais);
			paisObj.setId(paisId);
			paisObj.setDescripcion(pais);
			getUbicacion().addPais(paisObj);
		}
	}

	
	public void addProvincia(String pais, String provincia,String id) {
		UbicacionGenericaConHijo value = null;
		UbicacionGenericaConHijo paisObj = getPais(pais);
		if(paisObj!=null){
			value = getItem(paisObj,provincia);
			add(paisObj,value,provincia,id);
		}		
	}
	public void addPartido(String pais, String provincia,String partido,String id) {
		UbicacionGenericaConHijo value = null;
		UbicacionGenericaConHijo provinciaObj = null;
		UbicacionGenericaConHijo paisObj = getPais(pais);
		if(paisObj!=null){
			provinciaObj = getItem(paisObj,provincia);
			if(provinciaObj!=null){
				add(provinciaObj, value, partido,id);
			}else{
				Logger.getLogger(getClass()).error("la provincia es null");
			}
		}else{
			Logger.getLogger(getClass()).error("el pais es null");
		}
	}
	public void addLocalidad(String pais, String provincia,String partido,String localidad,String id) {
		UbicacionGenericaConHijo value = null;
		UbicacionGenericaConHijo provinciaObj = null;
		UbicacionGenericaConHijo partidoObj = null;
		UbicacionGenericaConHijo paisObj = getPais(pais);
		if(paisObj!=null){
			provinciaObj = getItem(paisObj,provincia);
			if(provinciaObj!=null){
				partidoObj = getItem(provinciaObj,partido);				
				add(partidoObj, value, localidad,id);
			}else{
				Logger.getLogger(getClass()).error("la provincia es null");
			}
		}else{
			Logger.getLogger(getClass()).error("el pais es null");
		}
	}
	
	public void addBarrio(String pais, String provincia,String partido,String localidad,String barrio,String id) {
		UbicacionGenericaConHijo value = null;
		UbicacionGenericaConHijo localidadObj = null;
		UbicacionGenericaConHijo partidoObj = null;
		UbicacionGenericaConHijo provinciaObj = null;		
		UbicacionGenericaConHijo paisObj = getPais(pais);
		if(paisObj!=null){
			provinciaObj = getItem(paisObj,provincia);
			if(provinciaObj!=null){
				partidoObj = getItem(provinciaObj,partido);
				if(partidoObj!=null){
					localidadObj = getItem(partidoObj,localidad);
					add(localidadObj, value, barrio,id);
				}else{
					Logger.getLogger(getClass()).error("el parido es null");
				}
			}else{
				Logger.getLogger(getClass()).error("la provincia es null");
			}
		}else{
			Logger.getLogger(getClass()).error("el pais es null");
		}
	}

	
	private void add(UbicacionGenericaConHijo list,UbicacionGenericaConHijo value,String strValue, String id){		
		if(list!=null){
			if(value==null){
				value = new UbicacionGenericaConHijo();
				value.setNombre(strValue);
				value.setId(id);
				value.setDescripcion(strValue);
				list.add(value);
			}else{
				Logger.getLogger(getClass()).error("el item no tiene que ser null");
			}
		}else{
			Logger.getLogger(getClass()).error("la lista es null");
		}
	}

	public void save() {
		ConfigurationManager<Ubicacion> configuration = new ConfigurationManager<Ubicacion>();
        try {
			configuration.write(ubicacion, "./log/ubicacion.argenprop.xml","utf-8");
		} catch (Exception e) {			
			e.printStackTrace();
		}
	}

	public void load() {
		ConfigurationManager<Ubicacion> configuration = new ConfigurationManager<Ubicacion>();
        try {
        	ubicacion = configuration.load("../data/ubicacion.argenprop.xml","utf-8");
		} catch (Exception e) {			
			e.printStackTrace();
		}
	}

	public Collection<UbicacionGenericaConHijo> getValues() {
		return ubicacion.getValues();
	}
	
	
}
